class MyCircularQueue {
    int[] queue;
    int left;
    int right;
    int len;

    public MyCircularQueue(int k) {
        len = k + 1;
        queue = new int[len];
        left = 0;
        right = 0;
    }

    public boolean enQueue(int value) {
        //如果len = k，此时判断为right % len == left。
        //若left不在队列两边，则此时left == right。
        //故会误判队列为空。
        if ((right + 1) % len == left) {
            return false;
        }
        queue[right] = value;
        right = (right + 1) % len;
        return true;
    }

    public boolean deQueue() {
        if (left == right) {
            return false;
        }
        left = (left + 1) % len;
        return true;
    }

    public int Front() {
        if (left == right) {
            return -1;
        }
        return queue[left];
    }

    public int Rear() {
        if (left == right) {
            return -1;
        }
        //若right == 0, 直接减会数组越界
        return queue[(right + len - 1) % len];
    }

    public boolean isEmpty() {
        return left == right;
    }

    public boolean isFull() {
        return (right + 1) % len == left;
    }

    // 主方法用于测试
    public static void main(String[] args) {
        MyCircularQueue queue = new MyCircularQueue(3); // 创建容量为3的队列

        System.out.println("入队操作测试:");
        System.out.println(queue.enQueue(1)); // 返回 true
        System.out.println(queue.enQueue(2)); // 返回 true
        System.out.println(queue.enQueue(3)); // 返回 true
        System.out.println(queue.enQueue(4)); // 返回 false，队列已满

        System.out.println("\n队列状态测试:");
        System.out.println(queue.isFull());   // 返回 true
        System.out.println(queue.Rear());     // 返回 3
        System.out.println(queue.Front());    // 返回 1

        System.out.println("\n出队操作测试:");
        System.out.println(queue.deQueue());  // 返回 true
        System.out.println(queue.Front());    // 返回 2

        System.out.println("\n边界条件测试:");
        System.out.println(queue.deQueue());  // 返回 true
        System.out.println(queue.deQueue());  // 返回 true
        System.out.println(queue.isEmpty());  // 返回 true
        System.out.println(queue.Rear());     // 返回 -1
        System.out.println(queue.Front());    // 返回 -1
    }
}